package com.tedu.api.thread;

/**
  * 线程----创建 3种
  * 第一种：子类 继承Thread 方案--【使用率不多】
  *      ①编写一个子类 MyThread1 继承 Thread
  *      ②子类，重写run方法 【线程运行】
  *      ③实例化 MyThread1 对象 调用start方法【启动线程】
  *
  * 第二种：子类 实现Runnable 方案--【推荐用法】
  *        ①编写子类MyRunnable1 实现 Runnable 接口
  *        ②子类，强制重写run方法【线程运行】
  *        ③实例化MyRunnable1对象【没有start方法】
  *        ④创建Thread对象，把实例化MyRunnable1 对象通过构造器
  *        ⑤使用Thread对象 start方法
  * 线程 继承Thread 内嵌入Runnable接口  重写run方法
  *     JavaOOP----缺点：Java支持单继承 子类继承Thread
  *     无法拓展：不仅线程 其他集合 继承其他类 只具备线程功能
  *     启动线程功能 start（）----线程生命周期
  *     缺点：线程创建不明确
  *    实现Runnable  真正的线程运行---定义run方法.线程运行状态
  *     优点：继承还可以实现---拓展性高
  *    缺点：线程创建不方便---项目:步骤逻辑清晰
  * 第三种：匿名内部类实现线程--->Lambda表达式
  */

public class RunnableAPI {
    public static void main(String[] args) {
        //创建 实现线程 对象  ----启动线程必须用start（）
        MyRunnable1 mr1=new MyRunnable1();
        //创建Thread对象----启动线程方法
        Thread t1=new Thread(mr1);
        t1.start();
        //练习：MyRunnable2 子类  实现 Runnable---1000次
        //                       岁月不停留，可我为你守候
        MyRunnable2 mr2=new MyRunnable2();
        Thread t2=new Thread(mr2);
        t2.start();
    }
}

class MyRunnable1 implements  Runnable{
    public void run() {
        for(int i=0;i<1000;i++){
            System.out.println("时间不等人，但我等你");
        }
    }
}

class MyRunnable2 implements  Runnable{
    public void run() {
        for(int i=0;i<1000;i++){
            System.out.println("岁月不停留，可我为你守候");
        }
    }
}

